Project status
Use case
A bash framework to fill the gaps to write testable, predictable and scoped
code in bash highly inspired by jandob's great tool rebash
rebash.
Integrate bashlink into your bash script (only main entry file):
if [ -f "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh" ]; then
source "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh"
elif [ -f "/usr/lib/bashlink/module.sh" ]; then
source "/usr/lib/bashlink/module.sh"
else
echo Needed bashlink library not found 1>&2
exit 1
fi
bl.module.import bashlink.logging
Integrate bashlink into your standalone bash script:
declare -gr MODULE_NAME_BASHLINK_PATH="$(
mktemp --directory --suffix -module-name-bashlink
)/bashlink/"
mkdir "$MODULE_NAME_BASHLINK_PATH"
if curl \
https://raw.githubusercontent.com/thaibault/bashlink/main/module.sh \
>"${MODULE_NAME_BASHLINK_PATH}module.sh"
then
declare -gr BL_MODULE_RETRIEVE_REMOTE_MODULES=true
source "${MODULE_NAME_BASHLINK_PATH}module.sh"
else
echo Needed bashlink library not found 1>&2
rm --force --recursive "$MODULE_NAME_BASHLINK_PATH"
exit 1
fi
Or combine both to implement a very agnostic script.
if [ -f "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh" ]; then
source "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh"
elif [ -f "/usr/lib/bashlink/module.sh" ]; then
source "/usr/lib/bashlink/module.sh"
else
declare -gr MODULE_NAME_BASHLINK_PATH="$(
mktemp --directory --suffix -module-name-bashlink
)/bashlink/"
mkdir "$MODULE_NAME_BASHLINK_PATH"
if curl \
https://raw.githubusercontent.com/thaibault/bashlink/main/module.sh \
>"${MODULE_NAME_BASHLINK_PATH}module.sh"
then
declare -gr BL_MODULE_RETRIEVE_REMOTE_MODULES=true
source "${MODULE_NAME_BASHLINK_PATH}/module.sh"
else
echo Needed bashlink library not found 1>&2
rm --force --recursive "$MODULE_NAME_BASHLINK_PATH"
exit 1
fi
fi
Best practise (entry) module pattern:
if [ -f "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh" ]; then
source "$(dirname "${BASH_SOURCE[0]}")/node_modules/bashlink/module.sh"
elif [ -f "/usr/lib/bashlink/module.sh" ]; then
source "/usr/lib/bashlink/module.sh"
else
declare -gr MODULE_NAME_BASHLINK_PATH="$(
mktemp --directory --suffix -module-name-bashlink
)/bashlink/"
mkdir "$MODULE_NAME_BASHLINK_PATH"
if curl \
https://raw.githubusercontent.com/thaibault/bashlink/main/module.sh \
>"${MODULE_NAME_BASHLINK_PATH}module.sh"
then
declare -gr BL_MODULE_RETRIEVE_REMOTE_MODULES=true
source "${MODULE_NAME_BASHLINK_PATH}/module.sh"
else
echo Needed bashlink library not found 1>&2
rm --force --recursive "$MODULE_NAME_BASHLINK_PATH"
exit 1
fi
fi
bl.module.import bashlink.exception
bl.module.import bashlink.logging
bl.module.import bashlink.tools
alias moduleName.main=moduleName_main
moduleName_main() {
bl.exception.activate
bl.exception.deactivate
}
if bl.tools.is_main; then
moduleName.main "$@"
[ -d "$MODULE_NAME_BASHLINK_PATH" ] && \
rm --recursive "$MODULE_NAME_BASHLINK_PATH"
[ -d "$BL_MODULE_REMOTE_MODULE_CACHE_PATH" ] && \
rm --recursive "$BL_MODULE_REMOTE_MODULE_CACHE_PATH"
fi